package com.artazapedidos.view;

import com.artazapedidos.persistence.Producto;
import com.google.appengine.api.datastore.Key;
import com.artazapedidos.service.ProductoService;
import com.artazapedidos.view.utils.MessageProvider;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.binding.message.MessageBuilder;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.webflow.execution.RequestContext;

@Controller("productoController")
@Scope("request")
public class ProductoController {

    ProductoService productoService;
    //Para persisitir,modificar
    Producto mi_producto;
    //Para el Listado
    private Collection<Producto> productos;
    //Para la busqueda
    private Collection<Producto> resultados;
    String palabra_busqueda;
    String tipo_busqueda;

    public void setTipo_busqueda(String tipo_busqueda) {
        this.tipo_busqueda = tipo_busqueda;
    }

    @PostConstruct
    private void iniciar() {
        mi_producto = new Producto();
    }

    public Collection<Producto> getResultados() {
        //System.out.println("Tipo: "+mi_producto.getTipo());
        System.out.println("Tipo: " + tipo_busqueda);
        /*resultados = productoService.getAllComidas(); */
        
        if(tipo_busqueda.equals("comida")){
        resultados=productoService.getAllComidas();
        }else{
        resultados=productoService.getAllBebidas();
        }
        
        return resultados;
    }

    public void setResultados(Collection<Producto> resultados) {
        this.resultados = resultados;
    }

    public Producto getMi_producto() {
        return mi_producto;
    }

    public void setMi_producto(Producto mi_producto) {
        this.mi_producto = mi_producto;
    }

    public String getPalabra_busqueda() {
        return palabra_busqueda;
    }

    public void setPalabra_busqueda(String palabra_busqueda) {
        this.palabra_busqueda = palabra_busqueda;
    }

    public String getTipo_busqueda() {
        return tipo_busqueda;
    }

    @Required
    @Autowired
    public void setProductoService(ProductoService productoService) {
        this.productoService = productoService;
    }

    public void setProductos(Collection<Producto> productos) {
        this.productos = productos;
    }

    public Collection<Producto> getProductos() {
        productos = productoService.getAllProductos();
        //System.out.println("Aqui QuedadaController getQuedadas=" + quedadas.size());
        return productos;
    }

    public String crearProducto() {
        FacesMessage msg = null;
        String producto_persistido = "no";

        if (mi_producto.getNombre() != null && mi_producto.getNombre().length() != 0 && mi_producto.getPrecio() != 0.0 && !mi_producto.getTipo().equals("0")) {
            producto_persistido = "si";
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, MessageProvider.getValue("correcto"), MessageProvider.getValue("producto_creado"));
            productoService.create(mi_producto);
        } else {
            producto_persistido = "no";

            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, MessageProvider.getValue("error"), MessageProvider.getValue("faltan_datos"));
        }


        FacesContext.getCurrentInstance().addMessage(null, msg);

        return producto_persistido;

    }

    public void borrarProducto() {

        FacesMessage msg = null;
        msg = new FacesMessage(FacesMessage.SEVERITY_INFO, MessageProvider.getValue("correcto"), MessageProvider.getValue("producto_borrado"));
        productoService.borrar(this.mi_producto);
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void modificarProducto(Producto prod) {
        FacesMessage msg = null;
        int x = 0;

        if (!prod.getNombre().equals(mi_producto.getNombre()) && mi_producto.getNombre().length() != 0 && !prod.getTipo().equals(mi_producto.getTipo()) && !mi_producto.getTipo().equals("0") && prod.getPrecio() != mi_producto.getPrecio() && mi_producto.getPrecio() != 0.0) {
            prod.setNombre(mi_producto.getNombre());
            prod.setTipo(mi_producto.getTipo());
            prod.setPrecio(mi_producto.getPrecio());
            x = 1;
        }

        if (x == 1) {
            productoService.update(prod);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, MessageProvider.getValue("correcto"), MessageProvider.getValue("producto_modificado"));
        } else {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, MessageProvider.getValue("aviso"), MessageProvider.getValue("no_modificacion"));
        }

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public Collection<Producto> busquedaPorTipo(String t) {
        Collection<Producto> todos = productoService.getAllProductos();
        System.out.println("get");
        System.out.println(todos.size());
        System.out.println(t);

        for (Producto p : todos) {
            if (p.getTipo().equals(t)) {
                resultados.add(p);
            }
        }
        return resultados;

    }
}
